﻿
using System;
using System.Runtime.InteropServices;


/*
   * Copyright:南京新广云信息技术有限公司
   * FileName: NativeTIm
   * Author: Alours
   * Date: 2020/03/20 22:14
   * Description: 腾讯IMSdk封装C++ 供C# 调用
   * History:
   * <author>    <time>    <version>    <desc>
   * alours        2020/03/21  1.0      增加 注册回调
   */
namespace TImSdk
{
    public class NativeTIm
    {

        private const string TIM_SDK_PATH = @"TIMSDK\\imsdk.dll";

        /////////////////////////////////////////////////////////////////////////////////
        //
        //****************************回调接口设置Begin******************************
        //
        /////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///  回调方法,根据传入的json_params参数类型来判断 
        /// </summary>
        /// <param name="code">用户的indentifier</param>
        /// <param name="desc">用户的sig</param>
        /// <param name="json_params">json_params</param>
        /// <param name="user_data">用户自定义数据</param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMCommCallbackDelegate(UInt32 code, string desc, string json_params, IntPtr user_data);
        public static TIMCommCallbackDelegate tIMCommCallbackDelegate;


        /// <summary>
        /// 消息上报已读回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMLoginCallbackDelegate(UInt32 code, string desc, string json_params, IntPtr user_data);
        public static OnTIMLoginCallbackDelegate onTIMLoginCallbackDelegate;
        /// <summary>
        /// 消息上报已读回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMSendTIMMsgReportReadedDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 消息上报已读回调委托
        /// </summary>
        public static OnTIMSendTIMMsgReportReadedDelegate onTIMSendTIMMsgReportReadedDelegate;

        /// <summary>
        /// 获取好友列表回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMFriendshipGetFriendProfileListCallBackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 获取好友列表回调委托
        /// </summary>
        public static OnTIMFriendshipGetFriendProfileListCallBackDelegate onTIMFriendshipGetFriendProfileListCallBackDelegate;

        /// <summary>
        /// 本地会话缓存回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMConvGetLocalConvListCallBackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 本地会话缓存回调委托
        /// </summary>
        public static OnTIMConvGetLocalConvListCallBackDelegate onTIMConvGetLocalConvListCallBackDelegate;

        /// <summary>
        /// 获取指定用户列表的个人资料回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMProfileGetUserProfileListCallBackDelegate(UInt32 code, string desc, IntPtr json_params, int user_data);
        /// <summary>
        /// 获取指定用户列表的个人资料回调委托
        /// </summary>
        public static OnTIMProfileGetUserProfileListCallBackDelegate onTIMProfileGetUserProfileListCallBackDelegate;
        /// <summary>
        /// 修改个人资料回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMProfileModifySelfUserProfileCallBackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 修改个人资料回调委托回调委托
        /// </summary>
        public static OnTIMProfileModifySelfUserProfileCallBackDelegate onTIMProfileModifySelfUserProfileCallBackDelegate;
        /// <summary>
        /// 好友资料修改回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMFriendshipModifyFriendProfileCallBackDelegate(UInt32 code, string desc, string json_params, IntPtr user_data);
        /// <summary>
        /// 好友资料修改回调委托
        /// </summary>
        public static OnTIMFriendshipModifyFriendProfileCallBackDelegate onTIMFriendshipModifyFriendProfileCallBackDelegate;

        /// <summary>
        /// 发送信息回调
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMMsgSendNewMsgCallBackDelegate(UInt32 code, string desc, IntPtr json_params, int user_data);
        /// <summary>
        /// 好友资料修改回调委托
        /// </summary>
        public static OnTIMMsgSendNewMsgCallBackDelegate onTIMMsgSendNewMsgCallBackDelegate;

        /// <summary>
        /// 获取好友添加请求未决信息列表回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMFriendshipGetPendencyListCallBackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 获取好友添加请求未决信息列表回调委托
        /// </summary>
        public static OnTIMFriendshipGetPendencyListCallBackDelegate onTIMFriendshipGetPendencyListCallBackDelegate;


        /// <summary>
        /// 获取好友添加请求未决信息列表回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMFriendshipAddFriendCallBackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 获取好友添加请求未决信息列表回调委托
        /// </summary>
        public static OnTIMFriendshipAddFriendCallBackDelegate onTIMFriendshipAddFriendCallBackDelegate;
        

        /// <summary>
        /// 获取消息回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMMsgGetMsgListCallbackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 获取消息回调委托
        /// </summary>
        public static OnTIMMsgGetMsgListCallbackDelegate onTIMMsgGetMsgListCallbackDelegate;
        /// <summary>
        /// 元素下载回调委托
        /// </summary>
        /// <param name="code"></param>
        /// <param name="desc"></param>
        /// <param name="json_params"></param>
        /// <param name="user_data"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void OnTIMMsgDownloadElemToPathCallbackDelegate(UInt32 code, string desc, IntPtr json_params, IntPtr user_data);
        /// <summary>
        /// 元素下载回调委托
        /// </summary>
        public static OnTIMMsgDownloadElemToPathCallbackDelegate onTIMMsgDownloadElemToPathCallbackDelegate;
        
        /// <summary>
        /// 增加接收新消息回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMRecvNewMsgCallbackDelegate(IntPtr json_msg_array, IntPtr user_data);
        /// <summary>
        /// 增加接收新消息回调委托
        /// </summary>
        public static TIMRecvNewMsgCallbackDelegate tIMRecvNewMsgCallbackDelegate;
        /// <summary>
        /// 删除接收新消息回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMRemoveRecvNewMsgCallbackDelegate(IntPtr json_msg_array, IntPtr user_data);
        /// <summary>
        /// 删除接收新消息回调委托
        /// </summary>
        public static TIMRemoveRecvNewMsgCallbackDelegate tIMRemoveRecvNewMsgCallbackDelegate { get; set; }

        /// <summary>
        /// 消息已读回执回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMMsgReadedReceiptCallbackDelegate(IntPtr json_msg_readed_receipt_array, IntPtr user_data);
        /// <summary>
        /// 消息已读回执回调委托
        /// </summary>
        public static TIMMsgReadedReceiptCallbackDelegate tIMMsgReadedReceiptCallbackDelegate;

       

        /// <summary>
        /// 接收的消息被撤回回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMMsgRevokeCallbackDelegate(IntPtr json_msg_locator_array, IntPtr user_data);
        /// <summary>
        /// 接收的消息被撤回回调委托
        /// </summary>
        public static TIMMsgRevokeCallbackDelegate tIMMsgRevokeCallbackDelegate;

        /// <summary>
        /// 消息内元素相关文件上传进度回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMMsgElemUploadProgressCallbackDelegate(IntPtr json_msg, UInt32 index, UInt32 cur_size, UInt32 total_size, IntPtr user_data);
        /// <summary>
        /// 消息内元素相关文件上传进度回调委托
        /// </summary>
        public static TIMMsgElemUploadProgressCallbackDelegate tIMMsgElemUploadProgressCallbackDelegate;
        /// <summary>
        /// 群事件回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMGroupTipsEventCallbackDelegate(IntPtr json_group_tip_array, IntPtr user_data);
        /// <summary>
        /// 群事件回调委托
        /// </summary>
        public static TIMGroupTipsEventCallbackDelegate tIMGroupTipsEventCallbackDelegate;

        /// <summary>
        /// 会话事件回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMConvEventCallbackDelegate(TIMConvEvent tIMConvEvent, IntPtr json_conv_array, IntPtr user_data);
        /// <summary>
        /// 会话事件回调委托
        /// </summary>
        public static TIMConvEventCallbackDelegate tIMConvEventCallbackDelegate;

        /// <summary>
        /// 网络状态回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMNetworkStatusListenerCallbackDelegate(TIMNetworkStatus status, Int32 code, string desc, IntPtr user_data);
        /// <summary>
        /// 网络状态回调委托
        /// </summary>
        public static TIMNetworkStatusListenerCallbackDelegate tIMNetworkStatusListenerCallbackDelegate;

        /// <summary>
        /// 被踢下线回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMKickedOfflineCallbackDelegate(IntPtr user_data);
        /// <summary>
        /// 被踢下线回调委托
        /// </summary>
        public static TIMKickedOfflineCallbackDelegate tIMKickedOfflineCallbackDelegate;



        /// <summary>
        /// 用户票据过期回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMUserSigExpiredCallbackDelegate(IntPtr json_identifier_array, IntPtr user_data);
        /// <summary>
        /// 用户票据过期回调委托
        /// </summary>
        public static TIMUserSigExpiredCallbackDelegate tIMUserSigExpiredCallbackDelegate;



        /// <summary>
        /// 添加好友的回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMOnAddFriendCallbackDelegate(IntPtr json_identifier_array, IntPtr user_data);
        /// <summary>
        /// 添加好友的回调委托
        /// </summary>
        public static TIMOnAddFriendCallbackDelegate tIMOnAddFriendCallbackDelegate;

        /// <summary>
        /// 删除好友的回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMOnDeleteFriendCallbackDelegate(IntPtr json_identifier_array, IntPtr user_data);
        /// <summary>
        /// 删除好友的回调委托
        /// </summary>
        public static TIMOnDeleteFriendCallbackDelegate tIMOnDeleteFriendCallbackDelegate;

        /// <summary>
        /// 更新好友资料的回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMUpdateFriendProfileCallbackDelegate(IntPtr json_friend_profile_update_array, IntPtr user_data);
        /// <summary>
        /// 更新好友资料的回调委托
        /// </summary>
        public static TIMUpdateFriendProfileCallbackDelegate tIMUpdateFriendProfileCallbackDelegate;

        /// <summary>
        /// 设置好友添加请求的回调
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMFriendAddRequestCallbackDelegate(IntPtr json_friend_profile_update_array, IntPtr user_data);
        /// <summary>
        /// 设置好友添加请求的回调
        /// </summary>
        public static TIMFriendAddRequestCallbackDelegate tIMFriendAddRequestCallbackDelegate;

        /// <summary>
        /// 设置日志回调
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMLogCallbackDelegate(TIMLogLevel tIMLogLevel, string log, IntPtr user_data);
        /// <summary>
        /// 设置日志回调
        /// </summary>
        public static TIMLogCallbackDelegate tIMLogCallbackDelegate;

        /// <summary>
        /// 消息更新回调委托
        /// </summary>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void TIMMsgUpdateCallbackDelegate(IntPtr json_msg_array, IntPtr user_data);
        /// <summary>
        /// 消息更新回调委托
        /// </summary>
        public static TIMMsgUpdateCallbackDelegate tIMMsgUpdateCallbackDelegate;

        /////////////////////////////////////////////////////////////////////////////////
        //
        //****************************回调接口设置End******************************
        //
        /////////////////////////////////////////////////////////////////////////////////


        /*********************************************************************************
          函数名   : TIMAddRecvNewMsgCallback
          功能     : 增加接收新消息回调
          参数     : cb              新消息回调函数委托
                     user_data       用户自定义数据
          返回值   : 无
          备注     :
                   如果用户是登录状态，ImSDK收到新消息会通过此接口设置的回调抛出，另外需要注意，抛出的消息不一定是未读的消息，
                   只是本地曾经没有过的消息（例如在另外一个终端已读，拉取最近联系人消息时可以获取会话最后一条消息，如果本地没有，会通过此方法抛出）。
                   在用户登录之后，ImSDK会拉取离线消息，为了不漏掉消息通知，需要在登录之前注册新消息通知。
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMAddRecvNewMsgCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMAddRecvNewMsgCallback(TIMRecvNewMsgCallbackDelegate cb, IntPtr user_data);
        /*********************************************************************************
         函数名   : TIMRemoveRecvNewMsgCallback
         功能     : 删除接收新消息回调
         参数     : cb              新消息回调函数委托
                    user_data       用户自定义数据
         返回值   : 无
         备注     :
                   参数cb需要跟[TIMAddRecvNewMsgCallback]()传入的cb一致，否则删除回调失败
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMRemoveRecvNewMsgCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMRemoveRecvNewMsgCallback(TIMRemoveRecvNewMsgCallbackDelegate cb);



        /*********************************************************************************
        函数名   : TIMSetMsgReadedReceiptCallback
        功能     : 设置消息已读回执回调
        参数     : cb              新消息回调函数委托
                   user_data       用户自定义数据
        返回值   : 无
        备注     :
                   发送方发送消息，接收方调用接口[TIMMsgReportReaded]()上报该消息已读，发送方ImSDK会通过此接口设置的回调抛出。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetMsgReadedReceiptCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetMsgReadedReceiptCallback(TIMMsgReadedReceiptCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
          函数名   : TIMSetMsgRevokeCallback
          功能     : 设置接收的消息被撤回回调
          参数     : cb              新消息回调函数委托
                     user_data       用户自定义数据
          返回值   : 无
          备注     :
                     发送方发送消息，接收方收到消息。此时发送方调用接口[TIMMsgRevoke]()撤回该消息，接收方的ImSDK会通过此接口设置的回调抛出。
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetMsgRevokeCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetMsgRevokeCallback(TIMMsgRevokeCallbackDelegate cb, IntPtr user_data);


        /*********************************************************************************
         函数名   : TIMSetMsgElemUploadProgressCallback
         功能     : 设置消息内元素相关文件上传进度回调
         参数     : cb              文件上传进度回调委托，请参考[TIMMsgElemUploadProgressCallback]
                    user_data       用户自定义数据
         返回值   : 无
         备注     :
                    设置消息元素上传进度回调。当消息内包含图片、声音、文件、视频元素时，
                    ImSDK会上传这些文件，并触发此接口设置的回调，用户可以根据回调感知上传的进度
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetMsgElemUploadProgressCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetMsgElemUploadProgressCallback(TIMMsgElemUploadProgressCallbackDelegate cb, IntPtr user_data);


        /*********************************************************************************
         函数名   : TIMSetGroupTipsEventCallback
         功能     : 设置群组系统消息回调
         参数     : cb               群消息回调委托
                    user_data       用户自定义数据
         返回值   : 无
         备注     :
                   群组系统消息事件包括 加入群、退出群、踢出群、设置管理员、取消管理员、群资料变更、群成员资料变更。此消息是针对所有群组成员下发的
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetGroupTipsEventCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetGroupTipsEventCallback(TIMGroupTipsEventCallbackDelegate cb, IntPtr user_data);


        /*********************************************************************************
        函数名   : TIMSetConvEventCallback
        功能     : 设置会话事件回调
        参数     : cb               设置会话事件回调委托
                   user_data       用户自定义数据
        返回值   : 无
        备注     :
                会话事件包括：
                会话新增
                会话删除
                会话更新。
                任何产生一个新会话的操作都会触发会话新增事件，例如调用接口[TIMConvCreate]()创建会话，接收到未知会话的第一条消息等。
                任何已有会话变化的操作都会触发会话更新事件，例如收到会话新消息，消息撤回，已读上报等。
                调用接口[TIMConvDelete]()删除会话成功时会触发会话删除事件。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetConvEventCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetConvEventCallback(TIMConvEventCallbackDelegate cb, IntPtr user_data);
        /*********************************************************************************
        函数名   : TIMSetKickedOfflineCallback
        功能     : 设置被踢下线通知回调
        参数     : cb             设置被踢下线通知回调委托
                   user_data       用户自定义数据
        返回值   : 无
        备注     :
                * > 用户如果在其他终端登录，会被踢下线，这时会收到用户被踢下线的通知，出现这种情况常规的做法是提示用户进行操作（退出，或者再次把对方踢下线）。
                * > 用户如果在离线状态下被踢，下次登录将会失败，可以给用户一个非常强的提醒（登录错误码ERR_IMSDK_KICKED_BY_OTHERS：6208），开发者也可以选择忽略这次错误，再次登录即可。
                * > 用户在线情况下的互踢情况：
                * +      用户在设备1登录，保持在线状态下，该用户又在设备2登录，这时用户会在设备1上强制下线，收到 TIMKickedOfflineCallback 回调。
                *        用户在设备1上收到回调后，提示用户，可继续调用login上线，强制设备2下线。这里是在线情况下互踢过程。
                * > 用户离线状态互踢:
                * +     用户在设备1登录，没有进行logout情况下进程退出。该用户在设备2登录，此时由于用户不在线，无法感知此事件，
                *       为了显式提醒用户，避免无感知的互踢，用户在设备1重新登录时，会返回（ERR_IMSDK_KICKED_BY_OTHERS：6208）错误码，表明之前被踢，是否需要把对方踢下线。
                *       如果需要，则再次调用login强制上线，设备2的登录的实例将会收到 TIMKickedOfflineCallback 回调。               
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetKickedOfflineCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetKickedOfflineCallback(TIMKickedOfflineCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
       函数名   : TIMSetKickedOfflineCallback
       功能     : 设置网络连接状态监听回调
       参数     : cb             连接事件回调
                  user_data      用户自定义数据
       返回值   : 无
       备注     :
                * > 当调用接口 [TIMInit]() 时，ImSDK会去连接云后台。此接口设置的回调用于监听网络连接的状态。
                * > 网络连接状态包含四个：正在连接、连接失败、连接成功、已连接。这里的网络事件不表示用户本地网络状态，仅指明ImSDK是否与即时通信IM云Server连接状态。
                * > 可选设置，如果要用户感知是否已经连接服务器，需要设置此回调，用于通知调用者跟通讯后台链接的连接和断开事件，另外，如果断开网络，等网络恢复后会自动重连，自动拉取消息通知用户，用户无需关心网络状态，仅作通知之用
                * > 只要用户处于登录状态，ImSDK内部会进行断网重连，用户无需关心。              
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetNetworkStatusListenerCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetNetworkStatusListenerCallback(TIMNetworkStatusListenerCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
       函数名   : TIMSetUserSigExpiredCallback
       功能     : 设置票据过期回调
       参数     : cb               设置票据过期回调委托
                  user_data        用户自定义数据
       返回值   : 无
       备注     :
                * 用户票据，可能会存在过期的情况，如果用户票据过期，此接口设置的回调会调用。
                * [TIMLogin]()也将会返回70001错误码。开发者可根据错误码或者票据过期回调进行票据更换               
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetUserSigExpiredCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetUserSigExpiredCallback(TIMUserSigExpiredCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
         函数名   : TIMSetOnAddFriendCallback
         功能     : 设置添加好友的回调
         参数     : cb               设置添加好友的回调委托
                    user_data        用户自定义数据
         返回值   : 无
         备注     :
                  * 此回调为了多终端同步。例如A设备、B设备都登录了同一账号的ImSDK，A设备添加了好友，B设备ImSDK会收到添加好友的推送，ImSDK通过此回调告知开发者。
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetOnAddFriendCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetOnAddFriendCallback(TIMOnAddFriendCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
        函数名   : TIMSetOnDeleteFriendCallback
        功能     : 设置删除好友的回调
        参数     : cb               设置删除好友的回调委托
                   user_data        用户自定义数据
        返回值   : 无
        备注     :
                 * 此回调为了多终端同步。例如A设备、B设备都登录了同一账号的ImSDK，A设备删除了好友，B设备ImSDK会收到删除好友的推送，ImSDK通过此回调告知开发者。
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetOnDeleteFriendCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetOnDeleteFriendCallback(TIMOnDeleteFriendCallbackDelegate cb, IntPtr user_data);


        /*********************************************************************************
       函数名   : TIMSetUpdateFriendProfileCallback
       功能     : 设置更新好友资料的回调
       参数     : cb               设置更新好友资料的回调委托
                  user_data        用户自定义数据
       返回值   : 无
       备注     :
                *  此回调为了多终端同步。例如A设备、B设备都登录了同一账号的ImSDK，A设备更新了好友资料，B设备ImSDK会收到更更新好友资料的推送，ImSDK通过此回调告知开发者。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetUpdateFriendProfileCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetUpdateFriendProfileCallback(TIMUpdateFriendProfileCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
         函数名   : TIMSetFriendAddRequestCallback
         功能     : 设置好友添加请求的回调
         参数     : cb               设置好友添加请求的回调委托
                    user_data        用户自定义数据
         返回值   : 无
         备注     :
                  *  * 当前登入用户设置添加好友需要确认时，如果有用户请求加当前登入用户为好友，会收到好友添加请求的回调，
                  *  ImSDK通过此回调告知开发者。如果多终端登入同一账号，每个终端都会收到这个回调。
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetFriendAddRequestCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetFriendAddRequestCallback(TIMFriendAddRequestCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
         函数名   : TIMSetLogCallback
         功能     : 设置日志回调
         参数     : cb               设置日志回调委托
                    user_data        用户自定义数据
         返回值   : 无
         备注     :
                  *  * 当前登入用户设置添加好友需要确认时，如果有用户请求加当前登入用户为好友，会收到好友添加请求的回调，
                  *  ImSDK通过此回调告知开发者。如果多终端登入同一账号，每个终端都会收到这个回调。
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetLogCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetLogCallback(TIMLogCallbackDelegate cb, IntPtr user_data);

        /*********************************************************************************
        函数名   : TIMSetMsgUpdateCallback
        功能     : 设置消息在云端被修改后回传回来的消息更新通知回调
        参数     : cb               设置消息在云端被修改后回传回来的消息更新通知回调委托
                   user_data        用户自定义数据
        返回值   : 无
        备注     :
                当您发送的消息在服务端被修改后，ImSDK会通过该回调通知给您 
                您可以在您自己的服务器上拦截所有即时通信IM消息 [发单聊消息之前回调](https://cloud.tencent.com/document/product/269/1632)
                设置成功之后，即时通信IM服务器会将您的用户发送的每条消息都同步地通知给您的业务服务器。
                您的业务服务器可以对该条消息进行修改（例如过滤敏感词），如果您的服务器对消息进行了修改，ImSDK就会通过此回调通知您。
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetMsgUpdateCallback", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern void TIMSetMsgUpdateCallback(TIMMsgUpdateCallbackDelegate cb, IntPtr user_data);

        /*******************************注册回调END***************************************/


        /////////////////////////////////////////////////////////////////////////////////
        //
        //                  初始化设置配置--------------------Begin
        //
        /////////////////////////////////////////////////////////////////////////////////
        /*********************************************************************************
        函数名   : TIMInit
        功能     : ImSDK初始化
        参数     : sdk_app_id 官网申请的SDKAppid
                   json_sdk_config ImSDK配置选项Json字符串,详情请参考[SdkConfig](TIMCloudDef.h)
        返回值   : 0成功，非0失败 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMInit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMInit(long sdk_app_id, string json_sdk_config);



        /********************************************************************************
        函数名   : TIMInit
        功能     : ImSDK卸载 卸载DLL或退出进程前需此接口卸载ImSDK，清理ImSDK相关资源
        返回值   : 0成功，非0失败 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMUninit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMUninit();


        /**
         * 获取ImSDK版本号
         *********************************************************************************
        * 函数名   :TIMGetSDKVersion
        * 功能     : 获取ImSDK版本号
        * 返回值   : IntPtr 返回ImSDK的版本号
        *            要将IntPtr 转 string
        *           Marshal.PtrToStringAnsi(IntPtr)
        * *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGetSDKVersion", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr TIMGetSDKVersion();
        /**
         * 设置额外的用户配置
         * *********************************************************************************
         * 函数名       :TIMSetConfig
         * 功能         : 设置额外的用户配置
         * 参数         :json_config配置选项
         *               tIMCommCallbackDelegate 返回设置配置之后所有配置的回调，此回调cb可为空，表示不获取所有配置信息。回调函数定义和参数解析请参考 [TIMCommCallback](TIMCloudCallback.h)
         *               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         * 返回值       :int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         * 回调函数     :TIMSetConfigCallbackEvent
         ********************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMSetConfig", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMSetConfig(string json_config, TIMCommCallbackDelegate tIMCommCallbackDelegate, IntPtr user_data);

        /////////////////////////////////////////////////////////////////////////////////
        //
        //                  初始化设置配置--------------------END
        //
        /////////////////////////////////////////////////////////////////////////////////


        /////////////////////////////////////////////////////////////////////////////////
        //
        //                  登录/登出--------------------BEIGN
        //
        /////////////////////////////////////////////////////////////////////////////////
        /********************************************************************************
        函数名   : TIMInit
        功能     : 登录
        参数     : user_id 用户的indentifier
                   user_sig 用户的sig
                   tIMCommCallbackDelegate 登录成功与否的回调。回调函数定义请参考[TIMCommCallback] (TIMCloudCallback.h)
                   user_data 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），其他值表示接口调用失败。每个返回值的定义请参考[TIMResult] (TIMCloudDef.h)

        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMLogin", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMLogin(string user_id, string user_sig, OnTIMLoginCallbackDelegate tIMCommCallbackDelegate, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMLogout
        功能     : 登出
        参数     : tIMCommCallbackDelegate 登录成功与否的回调。回调函数定义请参考[TIMCommCallback] (TIMCloudCallback.h)
                   user_data 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
        其他值表示接口调用失败。每个返回值的定义请参考[TIMResult] (TIMCloudDef.h)
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMLogout", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMLogout(OnTIMLoginCallbackDelegate tIMCommCallbackDelegate, IntPtr user_data);

        /////////////////////////////////////////////////////////////////////////////////
        //
        //                  登录/登出--------------------END
        //
        /////////////////////////////////////////////////////////////////////////////////



        /////////////////////////////////////////////////////////////////////////////////
        //
        //                  会话相关接-----------------BEGIN
        //
        /////////////////////////////////////////////////////////////////////////////////
        /********************************************************************************
        函数名   : TIMConvCreate
        功能     : 创建会话
        参数     : conv_id   会话的ID
                   conv_type 会话类型，请参考[TIMConvType](TIMCloudDef.h)
                   tIMCommCallbackDelegate 创建会话的回调。回调函数定义和参数解析请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调tIMCommCallbackDelegate才会被调用），
                   其他值表示接口调用失败。每个返回值的定义请参考[TIMResult] (TIMCloudDef.h)
        备注     : 会话是指面向一个人或者一个群组的对话，通过与单个人或群组之间会话收发消息
                   此接口创建或者获取会话信息，需要指定会话类型（群组或者单聊），以及会话对方标志（对方帐号或者群号）。会话信息通过cb回传。
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMConvCreate", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMConvCreate(string conv_id, TIMConvType conv_type, TIMCommCallbackDelegate tIMCommCallbackDelegate, IntPtr user_data);



        /********************************************************************************
       函数名   : TIMConvDelete
       功能     : 删除会话
       参数     : conv_id   会话的ID
                  conv_type 会话类型，请参考[TIMConvType](TIMCloudDef.h)
                  tIMCommCallbackDelegate 创建会话的回调。回调函数定义和参数解析请参考 [TIMCommCallback](TIMCloudCallback.h)
                  user_data 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调tIMCommCallbackDelegate才会被调用），
                  其他值表示接口调用失败。每个返回值的定义请参考[TIMResult] (TIMCloudDef.h)
       备注     : 此接口用于删除会话，删除会话是否成功通过回调返回。
      *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMConvDelete", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMConvDelete(string conv_id, TIMConvType conv_type, TIMCommCallbackDelegate tIMCommCallbackDelegate, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMConvGetConvList
        功能     : 获取本地缓存的会话列表
        参数     : tIMCommCallbackDelegate   获取会话缓存列表的回调。回调函数定义和参数解析请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                   其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMConvGetConvList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMConvGetConvList(OnTIMConvGetLocalConvListCallBackDelegate onTIMConvGetLocalConvListCallBackDelegate, IntPtr user_data);

        /********************************************************************************
       函数名   : TIMConvSetDraft
       功能     : 设置指定会话的草稿
       参数     : conv_id   会话的ID
                  conv_type 会话类型，请参考[TIMConvType](TIMCloudDef.h)
                  json_draft_param 被设置的草稿Json字符串
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                  其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMConvSetDraft", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMConvSetDraft(string conv_id, TIMConvType conv_type, string json_draft_param);


        /********************************************************************************
       函数名   : TIMConvCancelDraft
       功能     : 删除指定会话的草稿
       参数     : conv_id   会话的
                  conv_type 会话类型，请参考[TIMConvType](TIMCloudDef.h)
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                  其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMConvCancelDraft", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMConvCancelDraft(string conv_id, TIMConvType conv_type);
        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       会话相关接口--------------END
        //
        /////////////////////////////////////////////////////////////////////////////////


        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       消息相关接口-------------BEGIN
        //
        /////////////////////////////////////////////////////////////////////////////////
        /********************************************************************************
          函数名   : TIMMsgSendNewMsg
          功能     : 发送新消息
          参数     : conv_id                 会话的ID
                     conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                     json_msg_param          消息json字符串
                     tIMCommCallbackDelegate 发送新消息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
           备注    : 发送新消息，单聊消息和群消息的发送均采用此接口。
                    发送单聊消息时 conv_id 为对方的identifier， conv_type 为 kTIMConv_C2C 
                    发送群聊消息时 conv_id 为群ID， conv_type 为 kTIMConv_Group 。
                    发送消息时不能发送 kTIMElem_GroupTips 、 kTIMElem_GroupReport ，他们由为后台下发，用于更新(通知)群的信息。可以的发送消息内元素
                    文本消息元素，请参考 [TextElem](TIMCloudDef.h)
                    表情消息元素，请参考 [FaceElem](TIMCloudDef.h)
                    位置消息元素，请参考 [LocationElem](TIMCloudDef.h)
                    图片消息元素，请参考 [ImageElem](TIMCloudDef.h)
                    声音消息元素，请参考 [SoundElem](TIMCloudDef.h)
                    自定义消息元素，请参考 [CustomElem](TIMCloudDef.h)
                    文件消息元素，请参考 [FileElem](TIMCloudDef.h)
                    视频消息元素，请参考 [VideoElem](TIMCloudDef.h)
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgSendNewMsg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgSendNewMsg(string conv_id, TIMConvType conv_type, byte[] json_msg_param, OnTIMMsgSendNewMsgCallBackDelegate tIMCommCallbackDelegate, int user_data);


        /********************************************************************************
          函数名   : TIMMsgReportReaded
          功能     : 消息上报已读
          参数     : conv_id                 会话的ID
                     conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                     json_msg_param          消息json字符串
                     tIMCommCallbackDelegate 消息上报已读成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     :json_msg_param 可以填 NULL 空字符串指针或者""空字符串，
                    此时以会话当前最新消息的时间戳（如果会话存在最新消息）或
                    当前时间为已读时间戳上报.当要指定消息时，
                    则以该指定消息的时间戳为已读时间戳上报，
                    最好用接收新消息获取的消息数组里面的消息Json或者用消息定位符查找到的消息Json，
                    避免重复构造消息Json。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgReportReaded", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgReportReaded(string conv_id, TIMConvType conv_type, string json_msg_param, OnTIMSendTIMMsgReportReadedDelegate tIMCommCallbackDelegate, IntPtr user_data);

        /********************************************************************************
         函数名   : TIMMsgRevoke
         功能     : 消息撤回
         参数     : conv_id                 会话的ID
                    conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                    json_msg_param          消息json字符串
                    tIMCommCallbackDelegate 消息撤回成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 消息撤回。使用保存的消息Json或者用消息定位符查找到的消息Json，避免重复构造消息Json.
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgRevoke", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgRevoke(string conv_id, TIMConvType conv_type, string json_msg_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMMsgFindByMsgLocatorList
        功能     : 根据消息定位精准查找指定会话的消息
        参数     : conv_id                 会话的ID
                   conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                   json_msg_param          消息定位符数组
                   tIMCommCallbackDelegate 根据消息定位精准查找指定会话的消息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                   其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 此接口根据消息定位符精准查找指定会话的消息，该功能一般用于消息撤回时查找指定消息等
                   一个消息定位符对应一条消息
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgFindByMsgLocatorList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgFindByMsgLocatorList(string conv_id, TIMConvType conv_type, string json_msg_Locator_array, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
           函数名   : TIMMsgImportMsgList
           功能     : 导入消息列表到指定会话
           参数     : conv_id                 会话的ID
                      conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                      json_msg_array          消息数组
                      tIMCommCallbackDelegate 导入消息列表到指定会话成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
           返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
           备注     : 批量导入消息，可以自己构造消息去导入。也可以将之前要导入的消息数组Json保存，然后导入的时候直接调用接口，避免构造消息数组
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgImportMsgList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgImportMsgList(string conv_id, TIMConvType conv_type, string json_msg_array, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMMsgSaveMsg
        功能     : 保存自定义消息
        参数     : conv_id                 会话的ID
                   conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                   json_msg_param          消息json字符串
                   tIMCommCallbackDelegate 保存自定义消息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 消息保存接口，一般是自己构造一个消息Json字符串，然后保存到指定会话
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgSaveMsg", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgSaveMsg(string conv_id, TIMConvType conv_type, string json_msg_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
          函数名   : TIMMsgGetMsgList
          功能     : 获取指定会话的消息列表
          参数     : conv_id                 会话的ID
                     conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                     json_get_msg_param      消息json字符串
                     tIMCommCallbackDelegate 获取指定会话的消息列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
                     从 kTIMMsgGetMsgListParamLastMsg 指定的消息开始获取本地消息列表，kTIMMsgGetMsgListParamCount
                     为要获取的消息数目。kTIMMsgGetMsgListParamLastMsg 可以不指定，不指定时表示以会话最新的消息为 LastMsg。
                     若指定 kTIMMsgGetMsgListParamIsRamble 为true则本地消息获取不够指定数目时，会去获取云端漫游消息。
                     kTIMMsgGetMsgListParamIsForward 为true时表示获取比 kTIMMsgGetMsgListParamLastMsg 新的消息，
                     为false时表示获取比 kTIMMsgGetMsgListParamLastMsg 老的消息
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgGetMsgList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgGetMsgList(string conv_id, TIMConvType conv_type, byte[] json_get_msg_param, OnTIMMsgGetMsgListCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
          函数名   : TIMMsgDelete
          功能     : 删除指定会话的消息
          参数     : conv_id                 会话的ID
                     conv_type               会话类型，请参考[TIMConvType](TIMCloudDef.h)
                     json_msgdel_param       消息json字符串
                     tIMCommCallbackDelegate 删除指定会话的消息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
                     当设置 kTIMMsgDeleteParamMsg 时，在会话中删除指定本地消息
                     当未设置 kTIMMsgDeleteParamMsg 时， kTIMMsgDeleteParamIsRamble 为false表示删除会话所有本地消息，
                     true 表示删除会话所有漫游消息(删除漫游消息暂时不支持)
                     一般直接使用保存的消息Json，或者通过消息定位符查找得到的Json。不用删除的时候构造消息Json
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgDelete", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgDelete(string conv_id, TIMConvType conv_type, string json_msgdel_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
         函数名   : TIMMsgDownloadElemToPath
         功能     : 下载消息内元素到指定文件路径(图片、视频、音频、文件)
         参数     : json_download_elem_param  下载的参数Json字符串
                    path                      下载文件保存路径
                    tIMCommCallbackDelegate   下载成功与否的回调以及下载进度回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data               用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
                   此接口用于下载消息内图片、文件、声音、视频等元素。下载的参数
                   kTIMMsgDownloadElemParamFlag、kTIMMsgDownloadElemParamId、kTIMMsgDownloadElemParamBusinessId、
                   kTIMMsgDownloadElemParamUrl 均可以在相应元素内找到。其中 kTIMMsgDownloadElemParamType 
                   为下载文件类型 [TIMDownloadType](TIMCloudDef.h)
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgDownloadElemToPath", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgDownloadElemToPath(byte[] json_download_elem_param, byte[] path, OnTIMMsgDownloadElemToPathCallbackDelegate cb,  byte[] user_data);


        /********************************************************************************
         函数名   : TIMMsgBatchSend
         功能     : 群发消息
         参数     : json_batch_send_param     群发消息json字符串
                    tIMCommCallbackDelegate   群发消息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
                  批量发送消息的接口，每个identifier发送成功与否，通过回调cb返回。
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMMsgBatchSend", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMMsgBatchSend(string json_batch_send_param, TIMCommCallbackDelegate cb, IntPtr user_data);
        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       消息相关接口----------END
        //
        /////////////////////////////////////////////////////////////////////////////////

        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       群组相关接口----------BEGIN
        //
        /////////////////////////////////////////////////////////////////////////////////
        /********************************************************************************
        函数名   : TIMGroupCreate
        功能     : 创建群组
        参数     : json_group_create_param   创建群组的参数Json字符串
                   tIMCommCallbackDelegate   创建群组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                 创建群组时可以指定群ID，若未指定时IM通讯云服务器会生成一个唯一的ID，
                 以便后续操作，群组ID通过创建群组时传入的回调返回
                 创建群参数的Json Key详情请参考[CreateGroupParam](TIMCloudDef.h)
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupCreate", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupCreate(string json_group_create_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMGroupDelete
        功能     : 删除(解散)群组
        参数     : group_id                  要删除的群组ID
                   tIMCommCallbackDelegate   删除群组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                  对于私有群，任何人都无法解散群组。，
                  对于公开群、聊天室和直播大群，群主可以解散群组。
                  删除指定群组group_id的接口，删除成功与否可根据回调cb的参数判断。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupDelete", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupDelete(string group_id, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMGroupJoin
        功能     : 申请加入群组
        参数     : group_id                  要加入的群组ID
                   hello_msg                 申请理由（选填）
                   tIMCommCallbackDelegate   申请加入群组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                  私有群不能由用户主动申请入群
                  公开群和聊天室可以主动申请进入。
                  如果群组设置为需要审核，申请后管理员和群主会受到申请入群系统消息，
                  需要等待管理员或者群主审核，如果群主设置为任何人可加入，则直接入群成功。
                  直播大群可以任意加入群组
                  申请加入指定群组group_id的接口，申请加入的操作成功与否可根据回调cb的参数判断。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupJoin", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupJoin(string group_id, string hello_msg, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
        函数名   : TIMGroupQuit
        功能     : 退出群组
        参数     : group_id                  要退出的群组ID
                   tIMCommCallbackDelegate   退出群组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                  对于私有群，全员可退出群组。
                  对于公开群、聊天室和直播大群，群主不能退出。
                  退出指定群组group_id的接口，退出成功与否可根据回调cb的参数判断。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupQuit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupQuit(string group_id, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
        函数名   : TIMGroupQuit
        功能     : 邀请加入群组
        参数     : json_group_invite_param   邀请加入群组的Json字符串
                   tIMCommCallbackDelegate   邀请加入群组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                 只有私有群可以拉用户入群
                 公开群、聊天室邀请用户入群。
                 需要用户同意；直播大群不能邀请用户入群。
                 此接口支持批量邀请成员加入群组,Json Key详情请参考[GroupInviteMemberParam](TIMCloudDef.h)
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupInviteMember", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupInviteMember(string json_group_invite_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
        函数名   : TIMGroupDeleteMember
        功能     : 删除群组成员
        参数     : json_group_invite_param   删除群组成员的Json字符串
                   tIMCommCallbackDelegate   删除群组成员成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                 对于私有群：只有创建者可删除群组成员
                 对于公开群和聊天室：只有管理员和群主可以踢人。
                 对于直播大群：不能踢人。
                 此接口支持批量删除群成员,Json Key详情请参考[GroupDeleteMemberParam](TIMCloudDef.h)
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupDeleteMember", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupDeleteMember(string json_group_delete_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
       函数名   : TIMGroupGetJoinedGroupList
       功能     : 获取已加入群组列表
       参数     : tIMCommCallbackDelegate   获取已加入群组列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                  user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                   其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
       备注     : 
                此接口可以获取自己所加入的群列表
                此接口只能获得加入的部分直播大的列表。
                此接口用于获取当前用户已加入的群组列表，返回群组的基础信息。
                具体返回的群组基本信息字段参考[GroupBaseInfo](TIMCloudDef.h)
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupGetJoinedGroupList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupGetJoinedGroupList(TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
       函数名   : TIMGroupGetGroupInfoList
       功能     : 获取群组信息列表
       参数     : 
                  json_group_getinfo_param  获取群组信息列表参数的Json字符串
                  tIMCommCallbackDelegate   获取群组信息列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                  user_data                 用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                  其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
       备注     : 
                此接口用于获取指定群ID列表的群详细信息。具体返回的群组详细信息字段参考[GroupDetailInfo](TIMCloudDef.h)
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupGetGroupInfoList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupGetGroupInfoList(string json_group_getinfo_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
          函数名   : TIMGroupGetGroupInfoList
          功能     : 修改群信息
          参数     : 
                     json_group_modifyinfo_param  设置群信息参数的Json字符串Json字符串
                     tIMCommCallbackDelegate      修改群信息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data                    用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
                    修改群主（群转让）的权限说明
                        只有群主才有权限进行群转让操作。
                        直播大群不能进行群转让操作。
                    修改群其他信息的权限说明:
                        对于公开群、聊天室和直播大群，只有群主或者管理员可以修改群简介。
                        对于私有群，任何人可修改群简介。
                    kTIMGroupModifyInfoParamModifyFlag 可以按位或设置多个值。不同的flag设置不同的键,详情请参考[GroupModifyInfoParam](TIMCloudDef.h)
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupModifyGroupInfo", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupModifyGroupInfo(string json_group_modifyinfo_param, TIMCommCallbackDelegate cb, IntPtr user_data);



        /********************************************************************************
          函数名   : TIMGroupGetMemberInfoList
          功能     : 获取群成员信息列表
          参数     : 
                     json_group_getmeminfos_param  获取群成员信息列表参数的Json字符串
                     tIMCommCallbackDelegate       获取群成员信息列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data                     用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
                    任何群组类型都可以获取成员列表。
                    直播大群只能拉取部分成员列表：包括群主、管理员和部分成员
                    根据不同的选项，获取群成员信息列表。成员信息的各个字段含义请参考[GroupMemberInfo](TIMCloudDef.h)
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupGetMemberInfoList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupGetMemberInfoList(string json_group_getmeminfos_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
          函数名   : TIMGroupModifyMemberInfo
          功能     : 修改群成员信息
          参数     : 
                     json_group_modifymeminfo_param  设置群信息参数的Json字符串
                     tIMCommCallbackDelegate         设置群成员信息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data                       用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
                    只有群主或者管理员可以进行对群成员的身份进行修改。
                    直播大群不支持修改用户群内身份
                    只有群主或者管理员可以进行对群成员进行禁言
                     kTIMGroupModifyMemberInfoParamModifyFlag 可以按位或设置多个值，不同的flag设置不同的键。请参考[GroupModifyMemberInfoParam](TIMCloudDef.h)
          *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupModifyMemberInfo", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupModifyMemberInfo(string json_group_modifymeminfo_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
       函数名   : TIMGroupGetPendencyList
       功能     : 获取群未决信息列表
                  群未决信息是指还没有处理的操作，例如，邀请加群或者请求加群操作还没有被处理，称之为群未决信息
       参数     : 
                  json_group_getpendence_list_param  设置群未决信息参数的Json字符串
                  tIMCommCallbackDelegate            获取群未决信息列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                  user_data                          用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                  其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
       备注     : 
                    此处的群未决消息泛指所有需要审批的群相关的操作。例如：加群待审批，拉人入群待审批等等。即便审核通过或者拒绝后，该条信息也可通过此接口拉回，拉回的信息中有已决标志。
                    UserA申请加入群GroupA，则群管理员可获取此未决相关信息，UserA因为没有审批权限，不需要获取此未决信息。
                    如果AdminA拉UserA进去GroupA，则UserA可以拉取此未决相关信息，因为该未决信息待UserA审批
                    权限说明：
                     只有审批人有权限拉取相关未决信息。
                    kTIMGroupPendencyOptionStartTime 设置拉取时间戳,第一次请求填0,后边根据server返回的 [GroupPendencyResult](TIMCloudDef.h) 键 kTIMGroupPendencyResultNextStartTime 指定的时间戳进行填写。
                    kTIMGroupPendencyOptionMaxLimited 拉取的建议数量,server可根据需要返回或多或少,不能作为完成与否的标志
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupGetPendencyList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupGetPendencyList(string json_group_getpendence_list_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
        函数名   : TIMGroupReportPendencyReaded
        功能     : 上报群未决信息已读
        参数     : 
                   time_stamp                      已读时间戳(单位秒)
                   tIMCommCallbackDelegate         上报群未决信息已读成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                       用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                   其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                   时间戳time_stamp以前的群未决请求都将置为已读。上报已读后，仍然可以拉取到这些未决信息，
                   但可通过对已读时戳的判断判定未决信息是否已读。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupReportPendencyReaded", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupReportPendencyReaded(UInt32 time_stamp, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
         函数名   : TIMGroupHandlePendency
         功能     : 处理群未决信息
         参数     : 
                    json_group_handle_pendency_param  处理群未决信息参数的Json字符串
                    tIMCommCallbackDelegate         处理群未决信息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                       用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
                    对于群的未决信息，ImSDK增加了处理接口。审批人可以选择对单条信息进行同意或者拒绝。
                    已处理成功过的未决信息不能再次处理。
                    处理未决信息时需要带一个未决信息[GroupPendency](TIMCloudDef.h)，
                    可以在接口[TIMGroupGetPendencyList]()返回的未决信息列表将未决信息保存下来，
                    在处理未决信息的时候将[GroupPendency](TIMCloudDef.h)传入键 kTIMGroupHandlePendencyParamPendency 。
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMGroupHandlePendency", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMGroupHandlePendency(string json_group_handle_pendency_param, TIMCommCallbackDelegate cb, IntPtr user_data);



        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       群组相关接口----------END
        //
        /////////////////////////////////////////////////////////////////////////////////



        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       用户资料相关接口----------BEGIN
        //
        /////////////////////////////////////////////////////////////////////////////////

        /********************************************************************************
         函数名   : TIMProfileGetUserProfileList
         功能     : 获取指定用户列表的个人资料
         参数     : 
                    json_get_user_profile_list_param  获取指定用户列表的用户资料接口参数的Json字符串
                    tIMCommCallbackDelegate           获取指定用户列表的用户资料成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                         用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
                    可以通过这个获取任何人的个人资料，包括自己的个人资料。
                    当获取的个人资料不是自己的资料时，获取的个人资料加好友选项值为 kTIMProfileAddPermission_Unknown ，
                    无法获取不是自己的加好友权限信息，默认返回未知。
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMProfileGetUserProfileList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMProfileGetUserProfileList(byte[] json_get_user_profile_list_param, OnTIMProfileGetUserProfileListCallBackDelegate cb, int user_data);


        /********************************************************************************
         函数名   : TIMProfileModifySelfUserProfile
         功能     : 修改自己的个人资料
         参数     : 
                    json_modify_self_user_profile_param  修改自己的资料接口参数的Json字符串
                    tIMCommCallbackDelegate              修改自己的资料成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
                   修改好友资料，目前支持修改的字段请参考[UserProfileItem](TIMCloudDef.h)，
                   一次可更新多个字段。修改自定义字段时填入的key值可以添加 Tag_Profile_Custom_ 前缀，
                   也可以不添加 Tag_Profile_Custom_ 前缀，当不添加时，SDK内部会自动添加该前缀。
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMProfileModifySelfUserProfile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMProfileModifySelfUserProfile(string json_modify_self_user_profile_param, OnTIMProfileModifySelfUserProfileCallBackDelegate cb, IntPtr user_data);

        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       用户资料相关接口----------END
        //
        /////////////////////////////////////////////////////////////////////////////////

        /*******************************************************************************/

        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       关系链相关接口----------BEGIN
        //
        /////////////////////////////////////////////////////////////////////////////////

        /********************************************************************************
         函数名   : TIMFriendshipGetFriendProfileList
         功能     : 获取好友列表
         参数     : 
                    tIMCommCallbackDelegate              获取好友列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
                  此接口通过回调返回所有好友资料[FriendProfile](TIMCloudDef.h).
         *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipGetFriendProfileList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipGetFriendProfileList(OnTIMFriendshipGetFriendProfileListCallBackDelegate cb, IntPtr user_data);

        /********************************************************************************
        函数名   : TIMFriendshipAddFriend
        功能     : 添加好友
        参数     : 
                   json_add_friend_param                添加好友接口参数的Json字符串
                   TIMCommCallbackDelegate              添加好友成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                   user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                   其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                  好友关系有单向和双向好友之分。详情请参考[添加好友]
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipAddFriend", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipAddFriend(byte[] json_add_friend_param, OnTIMFriendshipAddFriendCallBackDelegate cb, IntPtr user_data);

        /********************************************************************************
       函数名   : TIMFriendshipHandleFriendAddRequest
       功能     : 处理好友请求
       参数     : 
                  json_handle_friend_add_param        处理好友请求接口参数的Json字符串
                  TIMCommCallbackDelegate              处理好友请求成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                  user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
       返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                  其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
       备注     : 
                 当自己的个人资料的加好友权限 kTIMUserProfileAddPermission 设置为 kTIMProfileAddPermission_NeedConfirm 时，
                 别人添加自己为好友时会收到一个加好友的请求，可通过此接口处理加好友的请求。
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipHandleFriendAddRequest", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipHandleFriendAddRequest(byte[] json_handle_friend_add_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMFriendshipModifyFriendProfile
        功能     : 更新好友资料(备注等)
        参数     : 
                    json_modify_friend_info_param        更新好友资料接口参数的Json字符串
                    TIMCommCallbackDelegate              更新好友资料成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
        备注     : 
                修改好友资料，目前支持修改的字段请参考[FriendProfileItem](TIMCloudDef.h)，
                一次可修改多个字段。修改自定义字段时填入的key值可以添加 Tag_SNS_Custom_ 前缀，
                也可以不添加 Tag_SNS_Custom_ 前缀，当不添加时，SDK内部会自动添加该前缀。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipModifyFriendProfile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipModifyFriendProfile(byte[] json_modify_friend_info_param, OnTIMFriendshipModifyFriendProfileCallBackDelegate cb, IntPtr user_data);

        /********************************************************************************
           函数名   : TIMFriendshipDeleteFriend
           功能     : 删除好友
           参数     : 
                       json_delete_friend_param             删除好友接口参数的Json字符串
                       TIMCommCallbackDelegate              删除好友成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                       user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
           返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                       其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
           备注     : 
                    删除好友也有删除单向好友还是双向好友之分，
                    [删除好友](https://cloud.tencent.com/document/product/269/1501#.E5.88.A0.E9.99.A4.E5.A5.BD.E5.8F.8B).
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipDeleteFriend", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipDeleteFriend(byte[] json_delete_friend_param, TIMCommCallbackDelegate cb, IntPtr user_data);




        /********************************************************************************
           函数名   : TIMFriendshipCheckFriendType
           功能     : 检测好友类型(单向的还是双向的)
           参数     : 
                       json_check_friend_list_param             检测好友接口参数的Json字符串
                       TIMCommCallbackDelegate              检测好友成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                       user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
           返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                       其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
           备注     : 
                    开发者可以通过此接口检测给定的 identifier 列表跟当前账户的好友关系，
                    [检测好友](https://cloud.tencent.com/document/product/269/1501#.E6.A0.A1.E9.AA.8C.E5.A5.BD.E5.8F.8B)。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipCheckFriendType", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipCheckFriendType(string json_check_friend_list_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
          函数名   : TIMFriendshipCreateFriendGroup
          功能     : 创建好友分组
          参数     : 
                      json_create_friend_group_param       创建好友分组参数的Json字符串
                      TIMCommCallbackDelegate              创建好友分组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
                   不能创建已存在的分组。
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipCreateFriendGroup", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipCreateFriendGroup(string json_create_friend_group_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
          函数名   : TIMFriendshipGetFriendGroupList
          功能     : 获取指定好友分组的分组信息
          参数     : 
                      json_get_friend_group_list_param     获取指定好友分组的分组信息的Json字符串
                      TIMCommCallbackDelegate              获取指定好友分组的分组信息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipGetFriendGroupList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipGetFriendGroupList(string json_get_friend_group_list_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
          函数名   : TIMFriendshipModifyFriendGroup
          功能     : 修改好友分组
          参数     : 
                      json_modify_friend_group_param       修改好友分组接口的Json字符串
                      TIMCommCallbackDelegate              修改好友分组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipModifyFriendGroup", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipModifyFriendGroup(string json_modify_friend_group_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
          函数名   : TIMFriendshipDeleteFriendGroup
          功能     : 删除好友分组
          参数     : 
                      json_modify_friend_group_param       删除好友分组接口参数的Json字符串
                      TIMCommCallbackDelegate              删除好友分组成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipDeleteFriendGroup", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipDeleteFriendGroup(string json_delete_friend_group_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
          函数名   : TIMFriendshipAddToBlackList
          功能     : 添加指定用户到黑名单
          参数     : 
                      json_add_to_blacklist_param          添加指定用户到黑名单接口参数的Json字符串
                      TIMCommCallbackDelegate              添加指定用户到黑名单成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipAddToBlackList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipAddToBlackList(string json_add_to_blacklist_param, TIMCommCallbackDelegate cb, IntPtr user_data);

        /********************************************************************************
          函数名   : TIMFriendshipGetBlackList
          功能     : 获取黑名单列表
          参数     : 
                      TIMCommCallbackDelegate              添加指定用户到黑名单成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipGetBlackList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipGetBlackList(TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
          函数名   : TIMFriendshipDeleteFromBlackList
          功能     : 从黑名单中删除指定用户列表
          参数     : 
                      json_delete_from_blacklist_param     从黑名单中删除指定用户接口参数的Json字符串
                      TIMCommCallbackDelegate              从黑名单中删除指定用户成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                      user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
          返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                      其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
          备注     : 
        *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipDeleteFromBlackList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipDeleteFromBlackList(string json_delete_from_blacklist_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
         函数名   : TIMFriendshipGetPendencyList
         功能     : 获取好友添加请求未决信息列表
         参数     : 
                     json_get_pendency_list_param        获取未决列表接口参数的Json字符串
                     TIMCommCallbackDelegate              获取未决列表成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 好友添加请求未决信息是指好友添加请求未处理的操作。例如，开发者添加对方为好友，对方还没有处理；
                    或者有人添加开发者为好友，开发者还没有处理，称之为好友添加请求未决信息
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipGetPendencyList", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipGetPendencyList(byte[] json_get_pendency_list_param, OnTIMFriendshipGetPendencyListCallBackDelegate cb, IntPtr user_data);


        /********************************************************************************
         函数名   : TIMFriendshipDeletePendency
         功能     : 删除指定好友添加请求未决信息
         参数     : 
                     json_delete_pendency_param           删除指定未决信息接口参数的Json字符串
                     TIMCommCallbackDelegate              删除指定未决信息成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                     user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
         返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                     其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
         备注     : 
       *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipDeletePendency", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipDeletePendency(string json_delete_pendency_param, TIMCommCallbackDelegate cb, IntPtr user_data);


        /********************************************************************************
        函数名   : TIMFriendshipReportPendencyReaded
        功能     : 上报好友添加请求未决信息已读
        参数     : 
                    time_stamp                           上报未决信息已读时间戳
                    TIMCommCallbackDelegate              上报未决信息已读用户成功与否的回调。回调函数定义请参考 [TIMCommCallback](TIMCloudCallback.h)
                    user_data                            用户自定义数据，ImSDK只负责传回给回调函数cb，不做任何处理
        返回值   : int 返回TIM_SUCC表示接口调用成功（接口只有返回TIM_SUCC，回调cb才会被调用），
                    其他值表示接口调用失败。每个返回值的定义请参考 [TIMResult](TIMCloudDef.h)
      *******************************************************************************/
        [DllImport(TIM_SDK_PATH, EntryPoint = "TIMFriendshipReportPendencyReaded", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int TIMFriendshipReportPendencyReaded(UInt32 time_stamp, TIMCommCallbackDelegate cb, IntPtr user_data);


        /////////////////////////////////////////////////////////////////////////////////
        //
        //                       关系链相关接口----------BEGIN
        //
        /////////////////////////////////////////////////////////////////////////////////
    }
}
